
#include "../header.h"

/**
 * @函数原型:  pid_t wait(int *wstatus);pid_t waitpid(pid_t pid, int *wstatus, int options);
 * @函数功能: wait for process to change state : 父进程调用这个函数，等待子进程状态改变， 运行状态 - 终止状态。
 * @参数说明: 
 * @       参数1: wstatus 子进程的退出状态。
 * @       参数2: pid：特定PID.
 * @       参数3: options:0;
 * @返回值: 
 * @param {int} argc
 */
int main(int argc, char const *argv[])
{
    pid_t pid = fork();
    if(pid < 0)
    {
        perror("fork error\n");
        return -1;
    }
    //父进程执行区间
    if(pid > 0 )
    {
        int num = 5;
        while(num--)
        {
            printf("this is parents process:%d ppid:%d\n",getpid(),getppid());
            sleep(1);
        }
        //避免孤儿进程
        //父进程等待。
        //1.不接受子进程的退出状态
        //wait(NULL);
        int status = 0 ;
        //2，接收子进程的退出状态
        wait(&status);
        //显示子进程的退出状态
        printf("子进程的退出状态为:%d\n",WEXITSTATUS(status));
        printf("parents end\n");
    }
    //子进程代码区间
    if(pid == 0)
    {
        int num =10;
        while(num--)
        {   
            printf("this is child process:%d %d\n",getpid(),getppid());
            sleep(1);
        }
        exit(2);
    }
    
    return 0;
}
